# def func():
#     print(123)
#     yield 999  # yield 也有返回的意思
#
#
# ret = func()
# # print(ret) #<generator object func at 0x0000028F3E7C0580>
# print(ret.__next__())  # 输出 123 和 999
# # print(ret.__next__())# 引发 StopIteration 异常
# # print(next(ret))  # 输出 123 和 999
# # print(next(ret))  # 引发 StopIteration 异常


# # 创建一个生成器
# def func():
#     print(123)
#     print(456)
#     yield 666
#     print(321)
#     yield 999
#
#
# ret = func()  # 调用function（）创建了一个ret对象，方便反复使用，
# print(ret.__next__())  # 执行生成器函数 print 123 456 ，直到遇到第一个yield 返回 666 ，然后函数暂停
# print(next(ret))  # 执行生成器函数 print 321 ，直到遇到第二个yield 返回 999 ，然后函数结束
# print(next(ret))  # 此时生成器已经没有更多的数据可供取出（生成器本质就是一个迭代器） 再使用next()或者__next__()会触发StopIteration异常


#
# # 去工厂定制衣服，使用传统的return，一次返回一千件
# def order():
#     lst = []
#     for i in range(1000):
#         lst.append(f"衣服{i}")
#     return lst
#
#
# lst = order()
# print(lst)
#


# def order():
#     lst = []
#     for i in range(1000):
#         lst.append(f"衣服{i}")
#         if len(lst) == 50:
#             yield lst  # yield返回一个包含了五十个元素的列表，然后暂停
#             lst = []  # 下一次调用yield时从这里开始，先将列表清空，然后继续for循环填充列表
#
#
# gen = order()
# print(gen.__next__())  # 第一次调用，执行生成器函数的代码（for循环填充列表），遇到第一个 yield （返回一个包含了五十个元素的列表）为止
# print(gen.__next__())  # 第二次调用，执行生成器函数的代码（继续for循环填充列表），遇到第二个 yield （返回一个包含了五十个元素的列表）为止
# print(next(gen)) # 。。。
#

# gen=(i**2 for i in range(10))
# # print(gen)  #  直接输出gen，提示这个是一个生成器 <generator object <genexpr> at 0x00000283E15604A0>
# print(gen.__next__())  # 生成器本质就是一个迭代器,用__next__或next（）逐步调用
# print(gen.__next__())
# print(next(gen))
# print(next(gen))

# # 生成器本身就是可迭代的
# gen = (i ** 2 for i in range(10))
# for item in gen:
#     print(item)


# gen = (i ** 2 for i in range(10))
# lst = list(gen)
# print(lst)
# #  简化
# print(list(i ** 2 for i in range(10)))
#
# s = list("周杰伦")
# print(s)
# #  简化
# print(list("周杰伦"))
#
# t = {i ** 2 for i in range(10)}
# print(t)

# gen = (i ** 2 for i in range(10))
# for item in gen:
#     print(item)
# # 生成器表达式是一次性表达式
# # 前面for循环已经拿完了生成器中的内容
# # 再print只能输出空了
# lst = list(gen)
# print(lst)
